package config

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"os"
	"wxuser-boot/entity"
)

// Db 是全局数据库连接对象
var Db *gorm.DB

// InitDB 初始化数据库连接
func InitDB() {
	// 获取并验证环境变量，使用默认值作为备选
	config := map[string]interface{}{
		"host":     getEnvOrDefault("DB_HOST", "192.168.31.13"),
		"port":     getEnvOrDefault("DB_PORT", "3306"),
		"user":     getEnvOrDefault("DB_USER", "root"),
		"password": getEnvOrDefault("DB_PASSWORD", "123456"),
		"dbname":   getEnvOrDefault("DB_NAME", "wx_user"),
	}
	// 构建DSN字符串
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", config["user"], config["password"], config["host"], config["port"], config["dbname"])
	fmt.Println("DSN:", dsn)
	// 打开数据库连接
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true, // 使用单数表名
		},
	})
	if err != nil {
		panic(fmt.Sprintf("无法连接数据库: %v", err)) // 提供更详细的错误信息
	}
	Db = db
	// 自动迁移表结构
	if err := Db.AutoMigrate(&entity.WxUser{}); err != nil {
		fmt.Println("自动迁移失败:", err)
		return
	}
}

// getEnvOrDefault 获取环境变量值，如果不存在则返回默认值
func getEnvOrDefault(key, defaultValue string) string {
	value := os.Getenv(key)
	if value == "" {
		return defaultValue
	}
	return value
}
